netflix_data <- read_csv("netflix-rotten-tomatoes-metacritic-imdb.csv")

-- Column specification -----------------------------------------------------------------------------------------------
cols(
  .default = col_character(),
  `Hidden Gem Score` = col_double(),
  `IMDb Score` = col_double(),
  `Rotten Tomatoes Score` = col_double(),
  `Metacritic Score` = col_double(),
  `Awards Received` = col_double(),
  `Awards Nominated For` = col_double(),
  `Netflix Release Date` = col_date(format = ""),
  `IMDb Votes` = col_double()
)
i Use `spec()` for the full column specifications.
netflix_data_cleaned <- read_csv("netflix-rotten-tomatoes-metacritic-imdb.csv")

-- Column specification -----------------------------------------------------------------------------------------------
cols(
  .default = col_character(),
  `Hidden Gem Score` = col_double(),
  `IMDb Score` = col_double(),
  `Rotten Tomatoes Score` = col_double(),
  `Metacritic Score` = col_double(),
  `Awards Received` = col_double(),
  `Awards Nominated For` = col_double(),
  `Netflix Release Date` = col_date(format = ""),
  `IMDb Votes` = col_double()
)
i Use `spec()` for the full column specifications.
netflix_data$Image[5]
[1] "https://occ-0-4039-1500.1.nflxso.net/dnm/api/v6/evlCitJPPCVCry0BZlEFb5-QjKc/AAAABb72YCHDSHzrB8i5_iG56UFm-qV2bslRyMHIqZ4tmlIpeVtMsqAyUem6JAxXtV4Ec9jlA4EpTdf5tNX2ivyLUwmPy4d3xowFdJE63MPXbWu8kAnc-j9qhAZrmMI.jpg?r=fad"
names(netflix_genre)
[1] "netflix_data$Genre"
netflix_data %>%
  filter(grepl(head(netflix_actors, n = 1), Actors))
fig
No scattermapbox mode specifed:
  Setting the mode to markers
  Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
No scattermapbox mode specifed:
  Setting the mode to markers
  Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
airbnb_data %>%
  skimr::skim()
-- Data Summary ------------------------
                           Values    
Name                       Piped data
Number of rows             20454     
Number of columns          89        
_______________________              
Column type frequency:               
  character                49        
  logical                  4         
  numeric                  36        
________________________             
Group variables            None      

-- Variable type: character ------------------------------------------------------------------------------------------
# A tibble: 49 x 8
   skim_variable                n_missing complete_rate   min   max empty n_unique whitespace
 * <chr>                            <int>         <dbl> <int> <int> <int>    <int>      <int>
 1 Listing.Url                          0             1    33    37     0    20454          0
 2 Last.Scraped                         0             1    10    10     0        1          0
 3 Name                                 0             1     0   109    97    19702          0
 4 Summary                              0             1     0  1000   959    19081          0
 5 Space                                0             1     0  1000  7613    12579          0
 6 Description                          0             1     0  1000    10    20212          0
 7 Experiences.Offered                  0             1     4     4     0        1          0
 8 Neighborhood.Overview                0             1     0  1000 10642     9270          0
 9 Notes                                0             1     0  1000 14495     5540          0
10 Transit                              0             1     0  1000  8718    11113          0
11 Access                               0             1     0  1000 10919     8895          0
12 Interaction                          0             1     0  1000 11216     8704          0
13 House.Rules                          0             1     0  1000  9468    10271          0
14 Thumbnail.Url                        0             1     0    93  2154    18300          0
15 Medium.Url                           0             1     0    94  2154    18300          0
16 Picture.Url                          0             1     0   110    64    20390          0
17 XL.Picture.Url                       0             1     0    95  2154    18300          0
18 Host.URL                             0             1    38    43     0    17717          0
19 Host.Name                            0             1     0    42    18     5590          0
20 Host.Since                           0             1     0    10    18     2419          0
21 Host.Location                        0             1     0   199   130      851          0
22 Host.About                           0             1     0  5078 10411     8146          0
23 Host.Response.Time                   0             1     0    18  6712        5          0
24 Host.Thumbnail.Url                   0             1     0   102    18    17639          0
25 Host.Picture.Url                     0             1     0   105    18    17639          0
26 Host.Neighbourhood                   0             1     0    62  5032      183          0
27 Host.Verifications                   0             1     0   113    10      243          0
28 Street                               0             1    15    51     0      628          0
29 Neighbourhood                        0             1     0    20  5613       94          0
30 Neighbourhood.Cleansed               0             1     4    41     0      137          0
31 Neighbourhood.Group.Cleansed         0             1     5    24     0       12          0
32 City                                 0             1     6     6     0        1          0
33 State                                0             1     0    21    42       20          0
34 Zipcode                              0             1     0    12   770      214          0
35 Market                               0             1     0    21    66        9          0
36 Smart.Location                       0             1    15    16     0        2          0
37 Country.Code                         0             1     2     2     0        1          0
38 Country                              0             1     7     7     0        1          0
39 Property.Type                        0             1     4    18     0       28          0
40 Room.Type                            0             1    11    15     0        3          0
41 Bed.Type                             0             1     5    13     0        5          0
42 Amenities                            0             1     0   873   124    15956          0
43 Calendar.Updated                     0             1     5    13     0       56          0
44 Calendar.last.Scraped                0             1    10    10     0        2          0
45 First.Review                         0             1     0    10  4375     1806          0
46 Last.Review                          0             1     0    10  4375      889          0
47 Cancellation.Policy                  0             1     6    15     0        4          0
48 Geolocation                          0             1    22    27     0    20454          0
49 Features                             0             1     0   159    26       49          0

-- Variable type: logical --------------------------------------------------------------------------------------------
# A tibble: 4 x 5
  skim_variable        n_missing complete_rate  mean count
* <chr>                    <int>         <dbl> <dbl> <chr>
1 Host.Acceptance.Rate     20454             0   NaN ": " 
2 Has.Availability         20454             0   NaN ": " 
3 License                  20454             0   NaN ": " 
4 Jurisdiction.Names       20454             0   NaN ": " 

-- Variable type: numeric --------------------------------------------------------------------------------------------
# A tibble: 36 x 11
   skim_variable                  n_missing complete_rate    mean            sd       p0      p25      p50     p75
 * <chr>                              <int>         <dbl>   <dbl>         <dbl>    <dbl>    <dbl>    <dbl>   <dbl>
 1 ID                                     0        1      1.01e 7  5578845.     1.97e+ 3 5.56e+ 6 1.02e+ 7 1.52e 7
 2 Scrape.ID                              0        1      2.02e13        0      2.02e+13 2.02e+13 2.02e+13 2.02e13
 3 Host.ID                                0        1      3.37e 7 33237387.     2.16e+ 3 7.31e+ 6 2.22e+ 7 4.86e 7
 4 Host.Response.Rate                  6712        0.672  8.94e 1       22.3    0        9   e+ 1 1   e+ 2 1   e 2
 5 Host.Listings.Count                   18        0.999  1.87e 0        3.66   0        1   e+ 0 1   e+ 0 2   e 0
 6 Host.Total.Listings.Count             18        0.999  1.87e 0        3.66   0        1   e+ 0 1   e+ 0 2   e 0
 7 Latitude                               0        1      5.25e 1        0.0305 5.23e+ 1 5.25e+ 1 5.25e+ 1 5.25e 1
 8 Longitude                              0        1      1.34e 1        0.0554 1.31e+ 1 1.34e+ 1 1.34e+ 1 1.34e 1
 9 Accommodates                           0        1      2.64e 0        1.50   1   e+ 0 2   e+ 0 2   e+ 0 3   e 0
10 Bathrooms                             64        0.997  1.09e 0        0.327  0        1   e+ 0 1   e+ 0 1   e 0
11 Bedrooms                              19        0.999  1.17e 0        0.623  0        1   e+ 0 1   e+ 0 1   e 0
12 Beds                                  30        0.999  1.61e 0        1.17   1   e+ 0 1   e+ 0 1   e+ 0 2   e 0
13 Square.Feet                        19836        0.0302 4.44e 2      488.     0        0        3.55e+ 2 7.08e 2
14 Price                                  8        1.00   5.72e 1       46.3    0        3   e+ 1 4.5 e+ 1 6.9 e 1
15 Weekly.Price                       15296        0.252  3.30e 2      161.     6.5 e+ 1 2.02e+ 2 3   e+ 2 4   e 2
16 Monthly.Price                      16800        0.179  1.12e 3      771.     2.65e+ 2 6.88e+ 2 9.5 e+ 2 1.3 e 3
17 Security.Deposit                   13112        0.359  2.29e 2      152.     0        1   e+ 2 2   e+ 2 3   e 2
18 Cleaning.Fee                        8565        0.581  2.74e 1       19.3    0        1.5 e+ 1 2.5 e+ 1 3.5 e 1
19 Guests.Included                        0        1      1.32e 0        0.794  1   e+ 0 1   e+ 0 1   e+ 0 1   e 0
20 Extra.People                           0        1      7.76e 0       10.1    0        0        5   e+ 0 1.5 e 1
21 Minimum.Nights                         0        1      4.79e 0       37.9    1   e+ 0 1   e+ 0 2   e+ 0 3   e 0
22 Maximum.Nights                         0        1      2.53e 5 19289789.     1   e+ 0 3   e+ 1 1.12e+ 3 1.12e 3
23 Availability.30                        0        1      5.48e 0        8.43   0        0        0        8   e 0
24 Availability.60                        0        1      1.30e 1       18.6    0        0        1   e+ 0 2.2 e 1
25 Availability.90                        0        1      2.21e 1       29.3    0        0        5   e+ 0 3.9 e 1
26 Availability.365                       0        1      1.04e 2      128.     0        0        3.3 e+ 1 2.08e 2
27 Number.of.Reviews                      0        1      1.29e 1       26.8    0        1   e+ 0 3   e+ 0 1.2 e 1
28 Review.Scores.Rating                4658        0.772  9.34e 1        8.06   2   e+ 1 9   e+ 1 9.5 e+ 1 1   e 2
29 Review.Scores.Accuracy              4707        0.770  9.59e 0        0.798  2   e+ 0 9   e+ 0 1   e+ 1 1   e 1
30 Review.Scores.Cleanliness           4699        0.770  9.29e 0        1.05   2   e+ 0 9   e+ 0 1   e+ 1 1   e 1
31 Review.Scores.Checkin               4716        0.769  9.66e 0        0.747  2   e+ 0 1   e+ 1 1   e+ 1 1   e 1
32 Review.Scores.Communication         4701        0.770  9.68e 0        0.738  2   e+ 0 1   e+ 1 1   e+ 1 1   e 1
33 Review.Scores.Location              4714        0.770  9.42e 0        0.810  2   e+ 0 9   e+ 0 1   e+ 1 1   e 1
34 Review.Scores.Value                 4723        0.769  9.35e 0        0.870  2   e+ 0 9   e+ 0 1   e+ 1 1   e 1
35 Calculated.host.listings.count         0        1      1.70e 0        2.85   1   e+ 0 1   e+ 0 1   e+ 0 1   e 0
36 Reviews.per.Month                   4375        0.786  1.07e 0        1.30   1   e- 2 2.2 e- 1 5.6 e- 1 1.38e 0
      p100 hist 
 *   <dbl> <chr>
 1 1.86e 7 ▅▅▆▆▇
 2 2.02e13 ▁▁▇▁▁
 3 1.29e 8 ▇▃▂▁▁
 4 1   e 2 ▁▁▁▁▇
 5 1.8 e 2 ▇▁▁▁▁
 6 1.8 e 2 ▇▁▁▁▁
 7 5.27e 1 ▁▁▇▃▁
 8 1.37e 1 ▁▂▇▁▁
 9 1.6 e 1 ▇▁▁▁▁
10 8   e 0 ▇▁▁▁▁
11 1   e 1 ▇▁▁▁▁
12 1.6 e 1 ▇▁▁▁▁
13 4.64e 3 ▇▁▁▁▁
14 9.95e 2 ▇▁▁▁▁
15 9.99e 2 ▇▇▃▁▁
16 1.39e 4 ▇▁▁▁▁
17 9.99e 2 ▇▇▂▁▁
18 3   e 2 ▇▁▁▁▁
19 1.5 e 1 ▇▁▁▁▁
20 2   e 2 ▇▁▁▁▁
21 5   e 3 ▇▁▁▁▁
22 2.15e 9 ▇▁▁▁▁
23 3   e 1 ▇▁▁▁▁
24 6   e 1 ▇▁▁▁▁
25 9   e 1 ▇▂▁▁▂
26 3.65e 2 ▇▂▁▁▂
27 3.6 e 2 ▇▁▁▁▁
28 1   e 2 ▁▁▁▁▇
29 1   e 1 ▁▁▁▁▇
30 1   e 1 ▁▁▁▁▇
31 1   e 1 ▁▁▁▁▇
32 1   e 1 ▁▁▁▁▇
33 1   e 1 ▁▁▁▁▇
34 1   e 1 ▁▁▁▁▇
35 3.4 e 1 ▇▁▁▁▁
36 1.06e 1 ▇▁▁▁▁
airbnb_data %>%
  filter(Price > 10) %>%
  plot_mapbox() %>%
  layout(mapbox = list(style = "open-street-map", center = list(lon = 13.3783, lat = 52.5163), zoom = 10)) %>%
  add_markers(x = ~Longitude, y = ~Latitude, 
              text = ~str_c(Name, ", EUR ", Price, sep = ""), hoverinfo = "text",
              size = 20, color = ~Neighbourhood.Group.Cleansed) %>% 
  highlight(on = "plotly_selected")
n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
berlin <- fromJSON(file = "airbnb-listings.geojson")
Fehler in fromJSON(file = "airbnb-listings.geojson") : 
  konnte Funktion "fromJSON" nicht finden
grouped_airbnb_host <- airbnb_data %>%
  group_by(Host.ID) %>%
  summarize(
    Number.of.Listings = n(),
    Mean.Price = mean(Price, na.rm = TRUE),
    Mean.Review.Scores.Rating = mean(Review.Scores.Rating, na.rm = TRUE),
    Mean.Review.Scores.Accuracy = mean(Review.Scores.Accuracy, na.rm = TRUE),
    Mean.Review.Scores.Cleanliness = mean(Review.Scores.Cleanliness, na.rm = TRUE),
    Mean.Review.Scores.Checkin = mean(Review.Scores.Checkin, na.rm = TRUE),
    Mean.Review.Scores.Communication = mean(Review.Scores.Communication, na.rm = TRUE),
    Mean.Review.Scores.Location = mean(Review.Scores.Location, na.rm = TRUE),
    Mean.Review.Scores.Value = mean(Review.Scores.Value, na.rm = TRUE),
    Mean.Number.of.Reviews = mean(Number.of.Reviews, na.rm = TRUE),
    Host.Name = Host.Name, 
    Host.Since = Host.Since,
    Host.Response.Rate = Host.Response.Rate,
    Host.Response.Time = Host.Response.Time,
    Host.Acceptance.Rate = Host.Acceptance.Rate
  ) 
`summarise()` has grouped output by 'Host.ID'. You can override using the `.groups` argument.
library(viridis) 
Lade n昼㸶tiges Paket: viridisLite
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KYGBge3J9DQpuZXRmbGl4X2RhdGEgPC0gcmVhZF9jc3YoIm5ldGZsaXgtcm90dGVuLXRvbWF0b2VzLW1ldGFjcml0aWMtaW1kYi5jc3YiKQ0KYGBgDQpgYGB7cn0NCm5ldGZsaXhfZGF0YSA8LSBuZXRmbGl4X2RhdGEgJT4lDQogIHJlbmFtZSgNCiAgICBUYWcgPSBUYWdzLA0KICAgIFNlcmllc19vcl9Nb3ZpZSA9IGBTZXJpZXMgb3IgTW92aWVgLA0KICAgIEhpZGRlbl9HZW1fU2NvcmUgPSBgSGlkZGVuIEdlbSBTY29yZWAsDQogICAgQ291bnRyeV9BdmFpbGFiaWxpdHkgPSBgQ291bnRyeSBBdmFpbGFiaWxpdHlgLA0KICAgIFZpZXdfUmF0aW5nID0gYFZpZXcgUmF0aW5nYCwNCiAgICBJTURiX1Njb3JlID0gYElNRGIgU2NvcmVgLA0KICAgIFJvdHRlbl9Ub21hdG9lc19TY29yZSA9IGBSb3R0ZW4gVG9tYXRvZXMgU2NvcmVgLA0KICAgIE1ldGFjcml0aWNfU2NvcmUgPSBgTWV0YWNyaXRpYyBTY29yZWAsDQogICAgQXdhcmRzX1JlY2VpdmVkID0gYEF3YXJkcyBSZWNlaXZlZGAsDQogICAgQXdhcmRzX05vbWluYXRlZCA9IGBBd2FyZHMgTm9taW5hdGVkIEZvcmAsDQogICAgUmVsZWFzZV9EYXRlID0gYFJlbGVhc2UgRGF0ZWAsDQogICAgTmV0ZmxpeF9SZWxlYXNlX0RhdGUgPSBgTmV0ZmxpeCBSZWxlYXNlIERhdGVgLA0KICAgIFByb2R1Y3Rpb25fSG91c2UgPSBgUHJvZHVjdGlvbiBIb3VzZWAsDQogICAgTmV0ZmxpeF9MaW5rID0gYE5ldGZsaXggTGlua2AsDQogICAgSU1EYl9Wb3RlcyA9IGBJTURiIFZvdGVzYCwNCiAgICBUTURiX1RyYWlsZXIgPSBgVE1EYiBUcmFpbGVyYCwNCiAgICBUcmFpbGVyX1NpdGUgPSBgVHJhaWxlciBTaXRlYA0KICApDQpgYGANCg0KDQpgYGB7cn0NCm5ldGZsaXhfZGF0YV9jbGVhbmVkIDwtIHJlYWRfY3N2KCJuZXRmbGl4LXJvdHRlbi10b21hdG9lcy1tZXRhY3JpdGljLWltZGIuY3N2IikNCm5ldGZsaXhfZGF0YV9jbGVhbmVkJEdlbnJlIDwtIHN0cl9zcGxpdChuZXRmbGl4X2RhdGEkR2VucmUsICIsICIpDQpuZXRmbGl4X2RhdGFfY2xlYW5lZCRUYWdzIDwtIHN0cl9zcGxpdChuZXRmbGl4X2RhdGEkVGFncywgIiwiKQ0KbmV0ZmxpeF9kYXRhX2NsZWFuZWQkTGFuZ3VhZ2VzIDwtIHN0cl9zcGxpdChuZXRmbGl4X2RhdGEkTGFuZ3VhZ2VzLCAiLCAiKQ0KbmV0ZmxpeF9kYXRhX2NsZWFuZWQkYENvdW50cnkgQXZhaWxhYmlsaXR5YCA8LSBzdHJfc3BsaXQobmV0ZmxpeF9kYXRhJGBDb3VudHJ5IEF2YWlsYWJpbGl0eWAsICIsIikNCm5ldGZsaXhfZGF0YV9jbGVhbmVkJERpcmVjdG9yIDwtIHN0cl9zcGxpdChuZXRmbGl4X2RhdGEkRGlyZWN0b3IsICIsICIpDQpuZXRmbGl4X2RhdGFfY2xlYW5lZCRXcml0ZXIgPC0gc3RyX3NwbGl0KG5ldGZsaXhfZGF0YSRXcml0ZXIsICIsICIpDQpuZXRmbGl4X2RhdGFfY2xlYW5lZCRBY3RvcnMgPC0gc3RyX3NwbGl0KG5ldGZsaXhfZGF0YSRBY3RvcnMsICIsICIpDQpuZXRmbGl4X2RhdGFfY2xlYW5lZCRgUHJvZHVjdGlvbiBIb3VzZWAgPC0gc3RyX3NwbGl0KG5ldGZsaXhfZGF0YSRgUHJvZHVjdGlvbiBIb3VzZWAsICIsICIpDQpgYGANCg0KYGBge3J9DQpuZXRmbGl4X2RhdGFfY2xlYW5lZCAlPiUNCiAgZmlsdGVyKCJTaG9ydCIgJWluJSBHZW5yZSkNCmBgYA0KYGBge3J9DQpuZXRmbGl4X2RhdGEkSW1hZ2VbNV0NCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXIpDQpuZXRmbGl4X2dlbnJlIDwtIHVuaXF1ZShzZXBhcmF0ZV9yb3dzKGFzLmRhdGEuZnJhbWUobmV0ZmxpeF9kYXRhJEdlbnJlKSwgIm5ldGZsaXhfZGF0YSRHZW5yZSIsIHNlcCA9ICIsICIsIGNvbnZlcnQgPSBUUlVFKSkNCm5ldGZsaXhfdGFncyA8LSB1bmlxdWUoc2VwYXJhdGVfcm93cyhhcy5kYXRhLmZyYW1lKG5ldGZsaXhfZGF0YSRUYWcpLCAibmV0ZmxpeF9kYXRhJFRhZyIsIHNlcCA9ICIsIiwgY29udmVydCA9IFRSVUUpKQ0KbmV0ZmxpeF9sYW5ndWFnZXMgPC0gdW5pcXVlKHNlcGFyYXRlX3Jvd3MoYXMuZGF0YS5mcmFtZShuZXRmbGl4X2RhdGEkTGFuZ3VhZ2VzKSwgIm5ldGZsaXhfZGF0YSRMYW5ndWFnZXMiLCBzZXAgPSAiLCAiLCBjb252ZXJ0ID0gVFJVRSkpDQpuZXRmbGl4X2NvdW50cnlfYXZhaWxhYmlsaXR5IDwtIHVuaXF1ZShzZXBhcmF0ZV9yb3dzKGFzLmRhdGEuZnJhbWUobmV0ZmxpeF9kYXRhJENvdW50cnlfQXZhaWxhYmlsaXR5KSwgIm5ldGZsaXhfZGF0YSRDb3VudHJ5X0F2YWlsYWJpbGl0eSIsIHNlcCA9ICIsIiwgY29udmVydCA9IFRSVUUpKQ0KbmV0ZmxpeF9kaXJlY3RvciA8LSB1bmlxdWUoc2VwYXJhdGVfcm93cyhhcy5kYXRhLmZyYW1lKG5ldGZsaXhfZGF0YSREaXJlY3RvciksICJuZXRmbGl4X2RhdGEkRGlyZWN0b3IiLCBzZXAgPSAiLCAiLCBjb252ZXJ0ID0gVFJVRSkpDQpuZXRmbGl4X3dyaXRlciA8LSB1bmlxdWUoc2VwYXJhdGVfcm93cyhhcy5kYXRhLmZyYW1lKG5ldGZsaXhfZGF0YSRXcml0ZXIpLCAibmV0ZmxpeF9kYXRhJFdyaXRlciIsIHNlcCA9ICIsICIsIGNvbnZlcnQgPSBUUlVFKSkNCm5ldGZsaXhfYWN0b3JzIDwtIHVuaXF1ZShzZXBhcmF0ZV9yb3dzKGFzLmRhdGEuZnJhbWUobmV0ZmxpeF9kYXRhJEFjdG9ycyksICJuZXRmbGl4X2RhdGEkQWN0b3JzIiwgc2VwID0gIiwgIiwgY29udmVydCA9IFRSVUUpKQ0KbmV0ZmxpeF9wcm9kdWN0aW9uX2hvdXNlIDwtIHVuaXF1ZShzZXBhcmF0ZV9yb3dzKGFzLmRhdGEuZnJhbWUobmV0ZmxpeF9kYXRhJFByb2R1Y3Rpb25fSG91c2UpLCAibmV0ZmxpeF9kYXRhJFByb2R1Y3Rpb25fSG91c2UiLCBzZXAgPSAiLCAiLCBjb252ZXJ0ID0gVFJVRSkpDQpuYW1lcyhuZXRmbGl4X2dlbnJlKSA8LSAiR2VucmUiDQpuYW1lcyhuZXRmbGl4X3RhZ3MpIDwtICJUYWciDQpuYW1lcyhuZXRmbGl4X2xhbmd1YWdlcykgPC0gIkxhbmd1YWdlIg0KbmFtZXMobmV0ZmxpeF9jb3VudHJ5X2F2YWlsYWJpbGl0eSkgPC0gIkNvdW50cnkiDQpuYW1lcyhuZXRmbGl4X2RpcmVjdG9yKSA8LSAiRGlyZWN0b3IiDQpuYW1lcyhuZXRmbGl4X3dyaXRlcikgPC0gIldyaXRlciINCm5hbWVzKG5ldGZsaXhfYWN0b3JzKSA8LSAiQWN0b3IiDQpuYW1lcyhuZXRmbGl4X3Byb2R1Y3Rpb25faG91c2UpIDwtICJQcm9kdWN0aW9uX0hvdXNlIg0KYGBgDQoNCmBgYHtyfQ0KbmV0ZmxpeF9kYXRhICU+JQ0KICBmaWx0ZXIoZ3JlcGwoaGVhZChuZXRmbGl4X2FjdG9ycywgbiA9IDEpLCBBY3RvcnMpKQ0KYGBgDQoNCmBgYHtyfQ0KYWlyYm5iX2RhdGEgPC0gcmVhZC5jc3YoImFpcmJuYi1saXN0aW5ncy5jc3YiLCBzZXAgPSAnOycsIGVuY29kaW5nID0gIlVURi04IikNCg0KbGlicmFyeShwbG90bHkpDQpmaWcgPC0gYWlyYm5iX2RhdGENCmZpZyA8LSBmaWcgJT4lDQogIHBsb3RfbHkoDQogICAgbGF0ID0gfkxhdGl0dWRlLA0KICAgIGxvbiA9IH5Mb25naXR1ZGUsDQogICAgdHlwZSA9ICdzY2F0dGVybWFwYm94Jw0KICApDQpmaWcgPC0gZmlnICU+JQ0KICBsYXlvdXQoDQogICAgbWFwYm94ID0gbGlzdCgNCiAgICAgIHN0eWxlID0gJ29wZW4tc3RyZWV0LW1hcCcsDQogICAgICB6b29tID0gNA0KICAgICkNCiAgKQ0KZmlnDQpgYGANCg0KDQpgYGB7cn0NCmFpcmJuYl9kYXRhJExpc3RpbmcuVXJsWzFdDQphaXJibmJfZGF0YSAlPiUNCiAgc2VsZWN0KCJOYW1lIiwgIkhvc3QuTmFtZSIsICJOZWlnaGJvdXJob29kLkNsZWFuc2VkIikNCmBgYA0KYGBge3J9DQphaXJibmJfZGF0YSAlPiUNCiAgc2VsZWN0KCJIb3N0LklEIjoiSG9zdC5WZXJpZmljYXRpb25zIikgJT4lDQogIGZpbHRlcihIb3N0Lk5hbWUgPT0gIk1hcmlhIikgJT4lDQogIGFycmFuZ2UoSG9zdC5SZXNwb25zZS5SYXRlKQ0KYGBgDQpgYGB7cn0NCmFpcmJuYl9kYXRhICU+JQ0KICBncm91cF9ieShOZWlnaGJvdXJob29kLkNsZWFuc2VkKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIG4gPSBuKCksDQogICAgUHJpY2UgPSBtZWFuKFByaWNlKSwNCiAgICBSZXZpZXcuU2NvcmVzLlJhdGluZyA9IG1lYW4oUmV2aWV3LlNjb3Jlcy5SYXRpbmcpDQogICkNCmBgYA0KYGBge3J9DQphaXJibmJfZGF0YSAlPiUNCiAgZ3JvdXBfYnkoTmVpZ2hib3VyaG9vZC5Hcm91cC5DbGVhbnNlZCkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICAjbiA9IG4oKSwNCiAgICAjUHJpY2UgPSBtZWFuKFByaWNlKSwNCiAgICAjUmV2aWV3LlNjb3Jlcy5SYXRpbmcgPSBtZWFuKFJldmlldy5TY29yZXMuUmF0aW5nKQ0KICAgIGZ1bnMobWVhbighaXMubmEoLikpKQ0KICApDQoNCmFpcmJuYl9kYXRhICU+JQ0KICBncm91cF9ieShOZWlnaGJvdXJob29kLkdyb3VwLkNsZWFuc2VkKSAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbiA9IG1lYW4pKSkNCg0KYWlyYm5iX2RhdGEgJT4lDQogIGZpbHRlcihhY3Jvc3MoYyhCZWRzLCBDb3VudHJ5KSwgfiAhaXMubmEoLikpKQ0KYGBgDQpgYGB7cn0NCmFpcmJuYl9kYXRhICU+JQ0KICBza2ltcjo6c2tpbSgpDQpgYGANCg0KYGBge3J9DQphaXJibmJfZGF0YSAlPiUNCiAgZmlsdGVyKFByaWNlID4gMjAwKSAlPiUNCiAgcGxvdF9tYXBib3goKSAlPiUNCiAgbGF5b3V0KG1hcGJveCA9IGxpc3Qoc3R5bGUgPSAib3Blbi1zdHJlZXQtbWFwIiwgY2VudGVyID0gbGlzdChsb24gPSAxMy4zNzgzLCBsYXQgPSA1Mi41MTYzKSwgem9vbSA9IDEwKSkgJT4lDQogIGFkZF9tYXJrZXJzKHggPSB+TG9uZ2l0dWRlLCB5ID0gfkxhdGl0dWRlLCANCiAgICAgICAgICAgICAgdGV4dCA9IH5zdHJfYyhOYW1lLCAiLCBFVVIgIiwgUHJpY2UsIHNlcCA9ICIiKSwgaG92ZXJpbmZvID0gInRleHQiLA0KICAgICAgICAgICAgICBzaXplID0gMjAsIGNvbG9yID0gSSgicmVkIikpICU+JSANCiAgaGlnaGxpZ2h0KG9uID0gInBsb3RseV9zZWxlY3RlZCIpDQoNCm1hcA0KYGBgDQpgYGB7cn0NCmFpcmJuYl9kYXRhICU+JQ0KICBmaWx0ZXIoUHJpY2UgPiAxMCkgJT4lDQogIHBsb3RfbWFwYm94KCkgJT4lDQogIGxheW91dChtYXBib3ggPSBsaXN0KHN0eWxlID0gIm9wZW4tc3RyZWV0LW1hcCIsIGNlbnRlciA9IGxpc3QobG9uID0gMTMuMzc4MywgbGF0ID0gNTIuNTE2MyksIHpvb20gPSAxMCkpICU+JQ0KICBhZGRfbWFya2Vycyh4ID0gfkxvbmdpdHVkZSwgeSA9IH5MYXRpdHVkZSwgDQogICAgICAgICAgICAgIHRleHQgPSB+c3RyX2MoTmFtZSwgIiwgRVVSICIsIFByaWNlLCBzZXAgPSAiIiksIGhvdmVyaW5mbyA9ICJ0ZXh0IiwNCiAgICAgICAgICAgICAgc2l6ZSA9IDIwLCBjb2xvciA9IH5OZWlnaGJvdXJob29kLkdyb3VwLkNsZWFuc2VkKSAlPiUgDQogIGhpZ2hsaWdodChvbiA9ICJwbG90bHlfc2VsZWN0ZWQiKQ0KYGBgDQpgYGB7cn0NCkRUOjpkYXRhdGFibGUoDQogIGhlYWQoYWlyYm5iX2RhdGEgJT4lIHNlbGVjdCgiSUQiLCAiTmFtZSIsICJQcmljZSIpLCBuID0gNjApLCANCiAgZmlsdGVyID0gInRvcCIsDQogIHNlbGVjdGlvbiA9ICJzaW5nbGUiDQogICkNCmBgYA0KDQpgYGB7cn0NCmdyb3VwZWRfYWlyYm5iIDwtIGFpcmJuYl9kYXRhICU+JQ0KICAgICAgZ3JvdXBfYnkoTmVpZ2hib3VyaG9vZC5Hcm91cC5DbGVhbnNlZCkgJT4lDQogICAgICBzdW1tYXJpemUoDQogICAgICAgIE1lYW4uUHJpY2UgPSBtZWFuKFByaWNlLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICBNZWFuLlJldmlldy5TY29yZXMuUmF0aW5nID0gbWVhbihSZXZpZXcuU2NvcmVzLlJhdGluZywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgTWVhbi5Ib3N0LlJlc3BvbnNlLlJhdGUgPSBtZWFuKEhvc3QuUmVzcG9uc2UuUmF0ZSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgTWVhbi5BY2NvbW9kYXRlcyA9IG1lYW4oQWNjb21tb2RhdGVzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICBNZWFuLkJhdGhyb29tcyA9IG1lYW4oQmF0aHJvb21zLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICBNZWFuLkJlZHJvb21zID0gbWVhbihCZWRyb29tcywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgTWVhbi5CZWRzID0gbWVhbihCZWRzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICBOdW1iZXIub2YuTGlzdGluZ3MgPSBuKCkNCiAgICAgICkNCmdyb3VwZWRfYWlyYm5iDQpgYGANCmBgYHtyfQ0KbGlicmFyeShyanNvbikNCmJlcmxpbiA8LSBmcm9tSlNPTihmaWxlID0gImJlcmxpbl9iZXppcmtlLmdlb2pzb24iKQ0KYGBgDQoNCmBgYHtyfQ0KZ3JvdXBlZF9haXJibmJfaG9zdCA8LSBhaXJibmJfZGF0YSAlPiUNCiAgZ3JvdXBfYnkoSG9zdC5JRCkgJT4lDQogIHN1bW1hcml6ZSgNCiAgICBOdW1iZXIub2YuTGlzdGluZ3MgPSBuKCksDQogICAgTWVhbi5QcmljZSA9IG1lYW4oUHJpY2UsIG5hLnJtID0gVFJVRSksDQogICAgTWVhbi5SZXZpZXcuU2NvcmVzLlJhdGluZyA9IG1lYW4oUmV2aWV3LlNjb3Jlcy5SYXRpbmcsIG5hLnJtID0gVFJVRSksDQogICAgTWVhbi5SZXZpZXcuU2NvcmVzLkFjY3VyYWN5ID0gbWVhbihSZXZpZXcuU2NvcmVzLkFjY3VyYWN5LCBuYS5ybSA9IFRSVUUpLA0KICAgIE1lYW4uUmV2aWV3LlNjb3Jlcy5DbGVhbmxpbmVzcyA9IG1lYW4oUmV2aWV3LlNjb3Jlcy5DbGVhbmxpbmVzcywgbmEucm0gPSBUUlVFKSwNCiAgICBNZWFuLlJldmlldy5TY29yZXMuQ2hlY2tpbiA9IG1lYW4oUmV2aWV3LlNjb3Jlcy5DaGVja2luLCBuYS5ybSA9IFRSVUUpLA0KICAgIE1lYW4uUmV2aWV3LlNjb3Jlcy5Db21tdW5pY2F0aW9uID0gbWVhbihSZXZpZXcuU2NvcmVzLkNvbW11bmljYXRpb24sIG5hLnJtID0gVFJVRSksDQogICAgTWVhbi5SZXZpZXcuU2NvcmVzLkxvY2F0aW9uID0gbWVhbihSZXZpZXcuU2NvcmVzLkxvY2F0aW9uLCBuYS5ybSA9IFRSVUUpLA0KICAgIE1lYW4uUmV2aWV3LlNjb3Jlcy5WYWx1ZSA9IG1lYW4oUmV2aWV3LlNjb3Jlcy5WYWx1ZSwgbmEucm0gPSBUUlVFKSwNCiAgICBNZWFuLk51bWJlci5vZi5SZXZpZXdzID0gbWVhbihOdW1iZXIub2YuUmV2aWV3cywgbmEucm0gPSBUUlVFKSwNCiAgICBIb3N0Lk5hbWUgPSBIb3N0Lk5hbWUsIA0KICAgIEhvc3QuU2luY2UgPSBIb3N0LlNpbmNlLA0KICAgIEhvc3QuUmVzcG9uc2UuUmF0ZSA9IEhvc3QuUmVzcG9uc2UuUmF0ZSwNCiAgICBIb3N0LlJlc3BvbnNlLlRpbWUgPSBIb3N0LlJlc3BvbnNlLlRpbWUsDQogICAgSG9zdC5BY2NlcHRhbmNlLlJhdGUgPSBIb3N0LkFjY2VwdGFuY2UuUmF0ZQ0KICApIA0KRFQ6OmRhdGF0YWJsZShncm91cGVkX2FpcmJuYl9ob3N0KQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeSh2aXJpZGlzKSANCmBgYA0KDQoNCg0KDQoNCg==